package org.ykhl.sdk.appserver;

import org.ykhl.mq.commons.Constants;
import org.ykhl.mq.commons.Utils;
import org.ykhl.mq.commons.receiver.MessageListener;

/**
 * 用于创建{@link MessageQueueKafkaImpl}对象的静态工厂类。
 *
 * Created by Zhangkefei on 2016/1/14.
 */
public class MessageQueueFactory {
    private static final String DEFAULT_SERVER_URL = "http://jtang-web:8080/appserver-restful/";
    private MessageQueueFactory(){}

    /**
     * 从证书文件中自动获取authKey, 并创建一个MessageQueue实例.
     *
     * @return
     */
    public static MessageQueue newInstance() {
        String authKey = Utils.getAuthIdFromKeyStoreUnchecked(
                Constants.KAFKA_SECURITY_KEYSTORE_LOCATION);

        return newInstance(authKey);
    }

    /**
     * 创建一个MessageQueue实例
     *
     * @param authKey 申请获得的密钥
     * @return
     */
    public static MessageQueue newInstance(String authKey) {
        return newInstance(DEFAULT_SERVER_URL, authKey);
    }

    /**
     * 创建一个MessageQueue实例
     *
     * @param serverAddress 连接的平台服务器地址
     * @param authKey 申请获得的密钥
     * @return
     */
    public static MessageQueue newInstance(String serverAddress, String authKey){
        return new MessageQueue(authKey, serverAddress);
    }

    /**
     * 创建一个MessageQueue实例
     *
     * @param authKey 申请获得的密钥
     * @param listener 推送消息的监听器
     * @return
     */
    @Deprecated
    public static MessageQueue newInstance(String authKey, MessageListener listener){
        return newInstance(authKey);
    }

    /**
     * 创建一个MessageQueue实例
     *
     * @param serverAddress 连接的平台服务器地址
     * @param authKey 申请获得的密钥
     * @param listener 推送消息的监听器
     * @return
     */
    @Deprecated
    public static MessageQueue newInstance(
            String serverAddress, String authKey, MessageListener listener){
        return newInstance(serverAddress, authKey);
    }

    /**
     * 创建一个MessageQueue实例
     *
     * @param securityFilePath 指定证书文件的路径
     * @return
     */
    public static MessageQueue newInstanceWithSecurityFilePath(String securityFilePath){

        String authId = Utils.getAuthIdFromKeyStoreUnchecked(securityFilePath);

        return newInstance(authId);
    }

    /**
     * 创建一个MessageQueue实例
     *
     * @param securityFilePath 指定证书文件的路径
     * @param listener 推送消息的监听器
     * @return
     */
    public static MessageQueue newInstanceWithSecurityFilePath(
            String securityFilePath, MessageListener listener){
        return newInstanceWithSecurityFilePath(securityFilePath);
    }

    /**
     * 创建一个MessageQueue实例
     *
     * @param serverAddress 连接的平台服务器地址
     * @param securityFilePath 指定证书文件的路径
     * @return
     */
    public static MessageQueue newInstanceWithSecurityFilePath(
            String serverAddress, String securityFilePath){

        String authId = Utils.getAuthIdFromKeyStoreUnchecked(securityFilePath);
        return newInstance(serverAddress, authId);
    }

    /**
     * 创建一个MessageQueue实例
     *
     * @param serverAddress 连接的平台服务器地址
     * @param securityFilePath 指定证书文件的路径
     * @param listener 推送消息的监听器
     * @return
     */
    public static MessageQueue newInstanceWithSecurityFilePath(
            String serverAddress, String securityFilePath, MessageListener listener){

        return newInstanceWithSecurityFilePath(serverAddress, securityFilePath);
    }
}
